const parametre

Otázka od: Martin Cajbik

24. 10. 2002 15:42

Zdravim,
jedna skor teoreticka otazka:
Akym sposobom su v Delphi reprezentovane beztypove const parametre procedur
a funkcii napr. function Write(const Buffer; Count: Longint): Longint a aky
je celkovo vztah medzi poliami, smernikmi a const parametrami ?
Parkrat sa mi totiz stalo, ze som omylom ako const parameter zadal pole
alebo smernik a dopadlo to samozrejme zle, ale az pocas runtime pretoze
kompilator nevyhlasil ani varovanie. Na to, ze ma Delphi pomerne silnu
typovu kontrolu mi tie const parametre pridu ako dost nebezpecna vlastnost.
Naviac, funkcie ktore su prevedene z C a pozaduju ako parameter void * su do
Delphi prevedene na taketo const parametre namiesto podla mna logickejsieho
Pointer alebo PChar.

MarCaNT (marcant@sct.sk)

Odpovedá: Delphin

24. 10. 2002 17:10

> Akym sposobom su v Delphi reprezentovane beztypove const parametre
procedur
> a funkcii napr. function Write(const Buffer; Count: Longint): Longint a
aky
> je celkovo vztah medzi poliami, smernikmi a const parametrami ?

Dle meho nazoru const Buffer je analogicky var Buffer s tim rozdilem, ze v
prvnim pripade nelze Bufer modifikovat. Fyzicky funkce dostane v obou
pripadech pointer na predavane data. Pri pouziti beztypoveho parametru
typova kontrola nema sanci, jak vyplyva jiz z nazvu, proto se nelze divit,
ze to "bere vse". Samozrejme nastane problem pri pouziti pointeru, stringu a
dynamickych poli, protoze funkce nedostane data, ale promennou typu pointer.

Me funguje:

Write(Pole,1); //Nedynamicke pole a vsechny bezne promenne
Write(Pole[Prvek],1); //Dynamicke nebo nedynamicke pole
Write(Ukazatel^,1); //Ukazatel

Delphin